#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e5+10,MAXL=1e6+10;

struct Car
{
	int d,v,a;
	bool operator <(Car b)
	{
		if(d!=b.d)return d<b.d;
		if(v!=b.v)return v<b.v;
		return a<b.a;
	}
}a[MAXN];

struct Range
{
	int l,r;
	bool operator <(Range b)
	{
		if(r!=b.r)return r<b.r;
		return l<b.l;
	}
}b[MAXN];

int n,m,L,v,p[MAXN],tot;

signed main()
{
	freopen("detect.in","r",stdin);
	freopen("detect.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int _;
	cin>>_;
	while(_--)
	{
		cin>>n>>m>>L>>v;
		v=v*v;
		tot=0;
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		for(int i=1;i<=n;i++)
		{
			cin>>a[i].d>>a[i].v>>a[i].a;
			a[i].v=a[i].v*a[i].v;
		}
		for(int i=1;i<=m;i++)cin>>p[i];
		sort(a+1,a+n+1);
		int ans1=0;
		for(int i=1;i<=n;i++)
		{
			if(p[m]<a[i].d)continue;
			if(a[i].a>=0)
			{
				if(a[i].v+2*a[i].a*(p[m]-a[i].d)>v)ans1++;
			}
			else
			{
				int tmp=*lower_bound(p+1,p+m+1,a[i].d);
				if(a[i].v+2*a[i].a*(tmp-a[i].d)>v)ans1++;
			}
		}
		int ans2=m;
		for(int i=1;i<=n;i++)
		{
			int l,r;
			if(a[i].a>0)
			{
				if(a[i].v>v)
				{
					l=a[i].d;
					r=L;
				}
				else
				{
					double tmp=(v-a[i].v)/2/a[i].a+a[i].d;
					l=min((int)(tmp+1e-8)+1,L+1);
					r=L;
				}
			}
			else if(a[i].a==0)
			{
				if(a[i].v>v)
				{
					l=a[i].d;
					r=L;
				}
				else l=r=L+1;
			}
			else
			{
				if(a[i].v<=v)l=r=L+1;
				else
				{
					double tmp=(v-a[i].v)/2/a[i].a+a[i].d;
					l=a[i].d;
					r=min((int)(tmp+1e-8),L);
				}
			}
			if(l==L+1||r==L+1)continue;
			l=lower_bound(p+1,p+m+1,l)-p;
			r=upper_bound(p+1,p+m+1,r)-p-1;
			if(l>r)continue;
			b[++tot]={l,r};
		}
		sort(b+1,b+tot+1);
		// for(int i=1;i<=tot;i++)cout<<b[i].l<<' '<<b[i].r<<'\n';
		for(int i=1,j=1;i<=tot;i++)
		{
			j=i+1;
			while(b[j].l<=b[i].r&&j<=tot)j++;
			// cout<<j<<'*';
			ans2--;
			bool flag=1;
			for(int k=i+1;k<=tot;k++)
			{
				if(b[k].l==b[j].l)
				{
					i=k-1;
					flag=0;
					// cout<<i<<'*';
					break;
				}
			}
			if(flag){break;}
		}
		cout<<ans1<<' '<<ans2<<'\n';
	}
	return 0;
}